QTableView自定义Model实现排序 |
您所在的位置:网站首页 › qtableview model › QTableView自定义Model实现排序 |
实现排序 (2020-8-26 更新) 排序是⼀个常⽤的功能,QTableView 也可以点击表头进⾏排序,相关接⼝: // 允许点击排序 ui->tableView->setSortingEnabled(true); // 按第 0 列升序 ui->tableView->sortByColumn(0,Qt::AscendingOrder); 但只对 QTableView 进⾏设置还不能⽣效,需要借助 QAbstractItemModel 类的 sort 接⼝(需要重写 sort 接⼝进⾏排序),或者借 助 QSortFilterProxyModel 类(可以重写 lessThan 接⼝⾃定义排序规则)。 Qt 提供的 QAbstractItemModel 及其派⽣类是有 sort 接⼝的,但是没有实现,对于⼀些简单的排序,可以继承并重写这个虚函数: #include // ⾃定义 Model class MyTableModel : public QAbstractTableModel { Q_OBJECT public: //... ... void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override { if(modelData.isEmpty()||modelData.first().count()tableView); QSortFilterProxyModel *proxy_model = new QSortFilterProxyModel(this); // 默认排序 role 应该是 dispalyRole ,我们可以修改 proxy_model->setSortRole(Qt::InitialSortOrderRole); proxy_model->setSourceModel(table_model); ui->tableView->setModel(proxy_model); 也可以重写 QSortFilterProxyModel 类的 lessThan 接⼝来实现⾃⼰的排序: #include // ⾃定义 SortProxy |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |